﻿
#ifndef CUSTOMBTN_H
#define CUSTOMBTN_H

#include <QFrame>
#include <QObject>
#include <QPushButton>
#include <QPropertyAnimation>
#include <QPainter>
#include <QPainterPath>

class customBtn : public QFrame
{
    Q_OBJECT
    /* 将m_color属性声明为可用于属性系统的属性。然后，提供了一个getColor函数作为该属性的读取器，
     * 以及一个setColor函数作为写入器。
     *  在setColor函数中，我们可以执行一些自定义逻辑，并在属性值发生变化时进行处理。 */
    Q_PROPERTY(QColor m_color READ getColor WRITE setColor)
    Q_PROPERTY(QSize m_size READ getSize WRITE setSize)
public:
    customBtn(QWidget *parent = nullptr, QString text = "", QString iconFile = "");
    ~customBtn();
    QColor getColor() const { return m_color; }
    void setColor(const QColor& color);
    QSize getSize() const { return m_size; }
    void setSize(const QSize& color);
    QPushButton *pushButton(){return m_pPushButtonRight;}
    int getWidth(){return this->width();}
    int getHeight(){return this->height();}
protected:
    void paintEvent(QPaintEvent *event) override;
    void enterEvent(QEvent *event) override ;
    void leaveEvent(QEvent *event) override ;
signals:
    void colorChanged();            //响应m_color属性动画
private slots:
    void updateColor();
private:
    QSize m_size;
    QColor  m_color;
    QString m_iconFile;
    QString m_btnText;
    QPropertyAnimation *m_pAnimation;  //属性动画
    QPushButton* m_pPushButtonIcon;
    QPushButton* m_pPushButtonRight;
    void initUI();
    void hoveringAnimation();           //鼠标悬停动画
};

#endif // CUSTOMBTN_H
